當 scrapy.Spider 爬蟲抓到資料後,會將資料送往 Item Pipelines 進行一系列的處理。常見的使用情境是:
Pipelines 中每一個組件都是一個 Python 類別,不需要繼承其他類別,但必須實作這個方法:
dict 物件、Item 物件、Twisted Deferred 或拋出 DropItem 例外。另外還可以視需求另外實作其他方法:
跟 Item 相同,建立好專案後,專案目錄中會有一個 pipelines.py 檔案,其中有 Scrapy 根據專案名稱自動建立的 IthomeCrawlersPipeline 類別。
class IthomeCrawlersPipeline(object):
    def process_item(self, item, spider):
        return item
假設我們不想要保存瀏覽次數小於 20 的文章可以這樣做:(只是找個範例沒有別的意思)
from scrapy.exceptions import DropItem
class IthomeCrawlersPipeline(object):
    def process_item(self, item, spider):
        if item['view_count'] < 20:
            raise DropItem(f'[{item["title"]}] 瀏覽數小於 20')
        return item
建立 Pipeline 元件後還需要設定每個元件的執行順序。在專案目錄中的 settings.py 檔案中有一個 dict 型態的 ITEM_PIPELINE 變數,key 是元件的完整名稱,value 是 0~1000 的整數,數字小的會先執行。
把我們剛剛建立的元件加入後會長這樣:
ITEM_PIPELINES = {
    'ithome_crawlers.pipelines.IthomeCrawlersPipeline': 300,
}
最後執行 scrapy crawl ithome -o ithome.csv 指令來執行爬蟲,可以在啟動的 log 中看到元件已經被加入 Pipeline 中。

執行過程中,有可能會看到這樣的 log,代表有文章被過濾掉了。

最後檢查輸出的 ithome.csv 檔案中沒有瀏覽數小於 20 的文章。